package controller;

public class Person  implements Cloneable {
    //浅拷贝：当类的成员变量是基本数据类型时，浅拷贝会将原对象的属性值赋值给新对象。当类中成员变量时引用数据类型时，浅拷贝 会将 原对象的引用数据类型的地址
    //赋值给新对象的成员变量。也就是说 两个对象共享了同一个数据。当其中一个对象修改成员变量的值时，另外一个的值也会随之改变。
    //深拷贝：无论是 基本数据类型还是引用数据类型，都会去开辟额外的空间给新对象。不会 出现浅拷贝中存在的问题。
    //当一个类中只有 基本数据类型时，浅拷贝与深拷贝 是同样的。当一个类中含有 引用数据类型是，浅拷贝只是拷贝一份引用，修改浅拷贝的值，
    //原来的也会跟着变化。说的晕晕的，来一个实例看看效果。



    //实例有一个叫张三的人，他想克隆自己，减轻自己的工作任务。要实现克隆，需要实现Cloneable标志接口，并实现里面的clone方法。
    //姓名与职业
    private String name;
    private String occupation;
    private Integer code;
    //省略get set 有参构造方法 以及重写toString方法
    @Override
    protected Object clone() {//重写clone方法
        Person person= null;
        try {
            person = (Person) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return person;
    }

    public Person(String name, String occupation, Integer code) {
        this.name = name;
        this.occupation = occupation;
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getOccupation() {
        return occupation;
    }

    public void setOccupation(String occupation) {
        this.occupation = occupation;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }
}
